package busco

import "wails/schema/enums/busenum"

// @schema_export --ident=schema --json --config=卡包
// @schema_go
// @cache_go
// @cache_ts
// @alias 卡包
type B卡包 struct {
	// 统计功能所在主体
	// @alias 所在主体
	S所在主体 string `link:"主体"`

	// 功能的扩展配置，优先级大于所在主体
	// 用于识别所在功能，获取指定功能数据时使用
	// 卡包可以不用设置
	// @alias 功能
	G功能 string `link:"功能"`

	// 在所在主体中唯一
	// @alias 标识
	B标识 string `alias:"标识"`

	// @alias 标旗
	B标旗 map[K卡包标旗]bool

	// @alias 激活条件
	J激活条件 map[string]string `link:"条件"`
	// 允许激活的最大数量
	// 0-不限
	// 场景：称号只能激活一个
	// @alias 激活数量
	J激活数量 int

	// @alias 装备模式
	Z装备模式 busenum.E装备模式
	// 往上追溯遇到的第一个指定主体种类的主体
	// @alias 装备主体
	Z装备主体 busenum.Z主体种类_卡片
	// 作为卡本的卡页的一部分；卡本的每一卡页，都包含有该卡包的一个实体；
	// @alias 组合到卡本
	K组合到卡本 string `link:"卡本"`
	// @alias 创建执行
	C创建执行 string `link:"执行"`
	// @alias 创建奖励
	C创建奖励 string `link:"奖励"`
	// @alias 清理消费
	Q清理消费 string `link:"消费"`
	// @alias 清理执行
	Q清理执行 string `link:"执行"`
	// @alias 清理奖励
	Q清理奖励 string `link:"奖励"`

	// 目标卡包对应卡槽的卡片，将受到本卡包卡片的修正
	// @alias 修正目标卡包
	X修正目标卡包 *S查找卡包
}

// @schema_export --ident=schema --json --config=卡包
// @schema_go
// @cache_go
// @cache_ts
// @alias 卡包_词条栏
type B卡包_词条栏 struct {
	B卡包

	// @alias 默认卡槽
	M默认卡槽 *B卡槽_条件

	// @alias 卡槽
	K卡槽 map[string]*B卡槽_条件

	// @alias 容量策略
	R容量策略 E卡包容量策略

	// 卡包的容量
	// @alias 容量
	R容量 int

	// 材料包里面的叠加数可超过物品设置的叠加数，并且可通过执行提升
	// 0-不限
	// 场景：激战2中的材料银行通过升级提升叠加数
	// @alias 叠加数
	D叠加数 int
}

// @schema_export --ident=schema --json --config=卡包
// @schema_go
// @cache_go
// @cache_ts
// @alias 卡包_物品栏
type B卡包_物品栏 struct {
	B卡包

	// @alias 默认卡槽
	M默认卡槽 *B卡槽_条件

	// 指定索引的格子的设置
	// 场景：游戏装备栏，指定卡槽只能装备指定装备
	// 卡槽索引与卡包形成卡槽的编号，保存卡槽相关的数据。因此非必要不改变卡槽索引，会影响已经保存的数据。
	// 如果有排序需求，使用【排序】调整显示的顺序
	// 某些场景，卡槽设置后，如果在游戏中产生了数据，不能改变，否则会出现数据错乱
	// @alias 卡槽
	K卡槽 map[string]*B卡槽_条件

	// @alias 容量策略
	R容量策略 E卡包容量策略

	// 卡包的容量
	// @alias 容量
	R容量 int

	// 材料包里面的叠加数可超过物品设置的叠加数，并且可通过执行提升
	// 0-不限
	// 场景：激战2中的材料银行通过升级提升叠加数
	// @alias 叠加数
	D叠加数 int
}

// 可指定实物卡片的卡包
// @schema_export --ident=schema --json --config=卡包
// @schema_go
// @cache_go
// @cache_ts
// @alias 卡包_藏品栏
type B卡包_藏品栏 struct {
	B卡包

	// @alias 卡槽
	K卡槽 map[string]*B卡槽_指定卡片
}

// @schema_export --ident=schema --json --config=卡包
// @schema_go
// @cache_go
// @cache_ts
// @alias 卡包_资源栏
type B卡包_资源栏 struct {
	B卡包

	// 材料包里面的叠加数可超过物品设置的叠加数，并且可通过执行提升
	// 0-不限
	// 场景：激战2中的材料银行通过升级提升叠加数
	// @alias 叠加数
	D叠加数 int

	// @alias 卡槽
	K卡槽 map[string]*B卡槽_指定卡片
}

// @schema_export --ident=schema --json --config=卡包
// @schema_go
// @cache_go
// @cache_ts
// @alias 卡包_记录栏
type B卡包_记录栏 struct {
	B卡包

	// @alias 默认卡槽
	M默认卡槽 *B卡槽_条件

	// @alias 卡槽
	K卡槽 map[string]*B卡槽_条件

	// @alias 容量策略
	R容量策略 E卡包容量策略

	// 卡包的容量
	// @alias 容量
	R容量 int

	// @alias 记录模式
	J记录模式 K卡包记录模式
	// 允许记录的最大数量
	// 场景：称号只记录一个
	// 场景：太阁的官职系统可占用多个位置
	// @alias 记录数量
	J记录数量 int
}

// @schema_export --ident=schema --json --config=卡包
// @schema_go
// @cache_go
// @cache_ts
// @alias 卡包_自定义
type B卡包_自定义 struct {
	B卡包

	// @alias 保存模式
	M保存模式 K卡包保存模式

	// 设置了【卡槽索引模式】为【标识模式】后，需要设置卡槽的【标识】和【指定卡片】
	// 【卡包模式】为【实体模式】，【卡槽索引模式】为【标识模式】， 用于【藏品栏】【冠名系统】，【称号系统】，【官职系统】
	// 【卡包模式】为【数字模式】，【卡槽索引模式】为【标识模式】，用于【资源栏】，【材料栏】
	// 【卡包模式】为【配置模式】，【卡槽索引模式】为【索引模式】，用于【词条栏】，【属性栏】
	// 【卡包模式】为【实体模式】，【卡槽索引模式】为【索引模式】，用于【物品栏】，【仓库栏】
	// 【卡包模式】为【数字模式】，【卡槽索引模式】为【索引模式】，禁止（因为数据模式必须指定卡片，为了避免插入或删减导致的索引混乱，必须为【标识模式】）
	// @alias 卡槽模式
	K卡槽模式 K卡槽模式

	// @alias 默认卡槽
	M默认卡槽 *B卡槽_条件

	// @alias 卡槽
	K卡槽 map[string]*B卡槽_条件

	// @alias 容量策略
	R容量策略 E卡包容量策略

	// 卡包的容量
	// @alias 容量
	R容量 int

	// 材料包里面的叠加数可超过物品设置的叠加数，并且可通过执行提升
	// 0-不限
	// 场景：激战2中的材料银行通过升级提升叠加数
	// @alias 叠加数
	D叠加数 int
}

// @schema_go
// @alias 数量设置策略
type S数量设置策略 int

const (
	S数量设置策略_初始化 S数量设置策略 = iota
	// 通常用于NPC，怪物或者无法升级的物品的配置
	S数量设置策略_固定
)

// @schema_go
// @alias 卡包容量策略
type E卡包容量策略 int

const (
	E卡包容量策略_不限 E卡包容量策略 = iota
	E卡包容量策略_指定容量
	E卡包容量策略_使用卡槽数量
)

// @schema_go --EnumToString=true
// @alias 卡包标旗
type K卡包标旗 int

const (

	// 物品栏通常允许整理
	K卡包标旗_允许整理 K卡包标旗 = 1
	K卡包标旗_允许移进 K卡包标旗 = 2
	// 可设置【移除消耗】
	// 场景：拆卸宝石功能
	K卡包标旗_允许移出 K卡包标旗 = 3

	// 卡包创建时，卡包的激活状态
	// 可通过【执行_卡包】设置卡包为已装备或未装备状态
	// 场景：禁止卡包中所有卡片的装备修正，可用于调试或者某些场景需要禁止某方面的修正
	K卡包标旗_默认未装备 K卡包标旗 = 5

	K卡包标旗_允许激活 K卡包标旗 = 12
	// 卡包创建时，卡包的激活状态
	// 可通过【执行_卡包】设置卡包为已激活或未激活状态
	// 场景：禁止卡包中所有卡片的激活修正，可用于调试或者某些场景需要禁止某方面的修正
	K卡包标旗_默认未激活 K卡包标旗 = 13

	K卡包标旗_允许零数量的卡片 K卡包标旗 = 9
	// 只有【允许战斗关联】的卡片可以移动到该卡包，并激活卡片的战斗关联
	// 场景：卡本，装备栏
	K卡包标旗_允许战斗关联 K卡包标旗 = 10
	// 默认使用配置时的索引，保存数据
	// 如果卡槽有删减的需求，可使用标识保存数据，标识在卡包内唯一
	K卡包标旗_使用标识保存卡槽数据 K卡包标旗 = 11
)

// @schema_go
// @alias 卡包保存模式
type K卡包保存模式 int

const (
	// 该模式只能放置已经实例化的卡片。卡槽记录卡片的编号。
	// 实体化的卡片是独立的主体，可以扩展功能。配置模式和数字模式只记录配置数量或数量
	// 可叠加根据配置
	// 场景: 可用于角色/单位的物品栏、装备栏、技能栏、藏品栏、宠物栏等
	// 场景：可用于角色的出战栏、阵型设置等
	// 场景：可用于物品、技能的宝石镶嵌系统
	// 场景：当卡包为商店时，被购买的商品数量会减少
	K卡包保存模式_实物模式 K卡包保存模式 = iota
	// 该模式的卡槽只记录卡片的配置编号和数量。
	// 卡片无需实例化，节省资源。
	// 卡片可叠加
	// 词条只能在词条模式的卡包中相互交换位置
	// 场景: 可用于单位、物品、技能的属性词条系统
	K卡包保存模式_配置模式
	// 该模式需要配置【卡片设置】，卡槽只记录数量，即对应【卡片设置】中【指定卡片】的数量。
	// 卡片无需实例化，节省资源。
	// 材料可以移动到物品模式的卡包，会实例化出一个唯一编号的卡片
	// 卡片可叠加
	// 场景：资源栏
	// 场景：激战2中的材料银行
	// 场景: 可用于称号系统, 通过执行修改是否装备(激活)
	K卡包保存模式_数字模式
	// 被移进卡包的卡片不会消失，只记录卡片编号和位置
	// 记录模式的卡包不支持奖励
	// 显示和更新时，检查卡片是否存在，不存在删除
	// 场景：阵型设置、装备冠名、装备器魂系统
	K卡包保存模式_记录模式
)

// @schema_go
// @alias 卡槽模式
type K卡槽模式 int

const (
	// 每一个卡槽都是独立的条件。用于装备栏、记录栏、物品栏、词条栏
	K卡槽模式_指定条件 K卡槽模式 = iota
	// 指定的卡片才可以放置。用于资源栏、藏品栏、技能栏
	K卡槽模式_指定卡片
)

// @schema_go
// @alias 卡包记录模式
type K卡包记录模式 int

const (
	//
	K卡包记录模式_映射 K卡包记录模式 = iota
	// 装配系统、冠名系统
	K卡包记录模式_替代
)
